<?php

namespace App\Console\Dispatch;


use App\Service\BaiduNlp;
use App\Service\Collect\Jrj as Service;
use Illuminate\Console\Command;


class Jrj extends Base
{
    /**
     * 采集快讯
     *
     * 参数与选项的区别
     *      在执行命令时，参数必须严格按定义时的顺序输入，不需输入参数名，只需输入参数的值即可。
     *      输入选项则必须带选项名，且选项名前须加 -- 前缀（选项简写字母前加 -），选项可按任意顺序输入
     */

    // sudo -u www php /www/wwwroot/shenlanhui/laravel/artisan command:gather-jrj
    // sudo -u www php www/wwwroot/slh/laravel.test/artisan command:gather-jrj
    //  php artisan command:gather-jrj
    // 请求 以及参数
    // protected $signature = 'command:name {param1} {param2}';  // 必填参数
    // protected $signature = 'command:name {参数名?} {参数名=默认值} {参数名? : 参数说明}';  // 可选参数
    // protected $signature = 'command:name {--选项名} {--选项名=} {--选项名=默认值} {--简写字母|选项名} {--选项名 : 选项说明}';  // 选项

    protected $signature   = 'command:gather-jrj {times=0} {number=6000}';
    protected $description = '采集金融界资讯';

    // 执行
    public function handle()
    {
        // 执行次数
        $times  = $this->argument('times') + 1;
        $number = $this->argument('number');
        $number = $number ?: 2000;
        $start  = ($times - 1) * $number;
        $end    = $times * $number;

        $keyword = '易见股份';
        $is_file = false;
        $cline   = chr(10);
        $maxPage = 10; // 最多获取10页的数据
        $maxPage = 2; // 上线后：最多获取2页的数据


        // 股票信息
        // $stocks  = $this->allStock($start, $end);  // 所有的股票
        $stocks  = $this->usedStock($start, $end);  // 风向标中使用的股票


        // 需要采集的
        foreach($stocks as $key => $it){
            $keyword = $it['name'];
            $page    = 1;
            $size    = 10;

            // 命令窗口名称
            $this->cmdTitle($this->description."：".$it['id']."：".$keyword);

            // 输出
            $this->line($cline.$cline.$cline.$cline);
            $this->question('采集股票信息：'.$keyword);
            $this->line($cline.$cline.$cline.$cline);


            // 执行采集
            for($page = 1; $page <= $maxPage; $page++){
                $this->getAndSave($keyword, $it['id'], $page, $size, $is_file);
                if($this->errorno == 500){
                    break;
                }
            }

            // 释放内存
            $this->sqlLog();
        }

        $this->showMsg('采集完成！');
    }

    // 采集并保存到数据库
    public function getAndSave($keyword, $keywordId, $page, $size, $is_file = false)
    {
        // 采集
        $collect = new \App\Service\Collect\Jrj();
        $list    = $collect->getApiList($keyword, $page, $size);
        $collect->setKeyword($keyword);
        $collect->setKeywordId($keywordId);
        $collect->setStartTime(strtotime("-1 months -1 days"));
        if(empty($list)){
            $message = $collect->getError() ?: '没有采集数据！';
            $this->showMsg($message, $collect->getCode());

            return true;
        }


        // 展示
        //$this->show($list[0]);

        // 采集详情内容
        //   TODO 这里采集的是百度的内容
        foreach($list as $key => $item){
            // 提示
            $this->showMsg(' '.($key + 1).'：==> 采集文章：'.$item['title']);

            $res = $collect->saveApiDataToDb($item, $key, $is_file);
            if($res === false){
                $this->showError($collect->getError(), $collect->getCode());
                if($collect->getCode() == 500){
                    break;
                }
            }
        }

        return true;
    }


}
